import { cloneDeep, isEmpty ,forEach} from 'lodash';
import { DEFAULT_MENU } from './menus';
import { fetchMenus ,fetchLoginUser} from '../services/routerService';

const Model = {
  namespace: 'enoadRouter', // 命名空间
  state: {
    menus: [],
  }, // store 数据
  effects: {
    // 副作用 *的是异步方法
    *fetchMenus(_, { call, put }) {
      const res = yield call(fetchMenus, {});
      let menus = cloneDeep(DEFAULT_MENU);
      if (res.code === 200) {
        //获取成功。
        forEach(menus, (item) => {
          if (item.path === '/standard') {
            //如果是列表。
            forEach(res.data, (menu) => {
              item.children.push({
                path: menu.apiKey,
                name: menu.name,
              });
            });
          }
        });
      }
      yield put({
        type: 'changeStatus',
        payload: { menus },
      });
    },
    *fetchLoginUser(_, { call, put }) {
      const res = yield call(fetchLoginUser, {});
      if (res.code === 200) {
        //获取成功。
        yield put({
          type: 'setLoginStatus',
          payload: { user: res.data ,res:res},
        });
      }
    },
  },

  reducers: {
    setLoginStatus(state, { payload }) {
      localStorage.setItem('user', JSON.stringify(payload.user));
      let storage = window.sessionStorage;
      storage.setItem('user', JSON.stringify(payload.res)); //控件库使用接口会用到该数据。
      return { ...state, ...payload };
    },
    // effect获取数据处理方法
    changeStatus(state, { payload }) {
      return { ...state, ...payload };
    },
  },
};
export default Model;
